package com.tcm.entity.resp;

import com.tcm.common.enums.ResponseEnum;
import lombok.AllArgsConstructor;
import lombok.Data;

/**
 * 标准响应体封装类
 * @author guqier
 * @version 1.0
 */
@Data
@AllArgsConstructor
public class R {

    /**
     * 结果码，1为成功，其他为失败
     */
    private Integer code;

    /**
     * 响应消息
     */
    private String msg;

    /**
     * 响应数据体
     */
    private Object data;

    /**
     * 基于响应状态枚举的构造方法
     * @param responseEnum 响应状态枚举
     */
    public R(ResponseEnum responseEnum) {
        this.code = responseEnum.getCode();
        this.msg = responseEnum.getMsg();
    }

    /**
     * 基于响应状态枚举和数据体的构造方法
     * @param responseEnum 响应状态枚举
     * @param data 响应数据
     */
    public R(ResponseEnum responseEnum, Object data) {
        this.code = responseEnum.getCode();
        this.msg = responseEnum.getMsg();
        this.data = data;
    }

    /**
     * 通用成功响应
     * @param data 响应数据
     * @return 响应体
     */
    public static R success(Object data) {//请求成功信息
        return new R(ResponseEnum.SUCCESS,data);
    }

    /**
     * 通用成功响应
     * @return 响应体
     */
    public static R success() {//请求成功信息
        return new R(ResponseEnum.SUCCESS,null);
    }

    /**
     * 通用失败响应
     * @param code 响应码
     * @param msg 响应信息
     * @return 响应体
     */
    public static R fail(int code, String msg) {//请求失败信息
        return new R(code,msg,null);
    }

    /**
     * 通用失败响应
     * @param responseEnum 响应Code枚举
     * @return 响应体
     */
    public static R fail(ResponseEnum responseEnum){
        return new R(responseEnum, null);
    }

}
